데이터셋 저작도구(DSKnife) 개발

□ 글로벌 옵션 설정

o 설정 위치 : ‘dsknife.exe’ 위치 폴더 및 현재 작업 폴더

* 현재 작업 폴더의 ‘dsknife.cnf’가 우선 적용됨

o 설정 파일 : dsknife.cnf

o 설정 필드

필드명	형식	설명
FILE_TYPE	int	o 1 : Safeware(기본값) o 2 : KFALL
WINDOW_SIZE	int	o 기본값 : 25
WINDOW_SHIFT	int	o 기본값 : 1
YTRAIN_THRESHOLD	int	o 기본값 : 10
ACC_SCALE_FACTOR	float	o 가속도 수치에 곱할 값 o 기본값 : 1.0f
GYRO_SCALE_FACTOR	float	o 각속도 수치에 곱할 값 o 기본값 : 1.0f
FILE_REPEAT_COUNT	int	o 파일 전체 데이터 반복 횟수 o 기본값 : 1
BLOCK_REPEAT_COUNT	int	o 낙상 데이터 반복 횟수 o 기본값 : 1

□ 리스트 파일에 의한 트레이닝 데이터셋 생성

o 기능 : 리스트 파일에 포함된 파일 목록에 따라 트레이닝 데이터셋을 생성

o 명령어 형식

dsknife –l <lst_file>

dsknife –l0 <lst_file>

* 일상 윈도우 블록만 저장, -r∙r2∙a 명령도 동일 방식 사용

dsknife –l1 <lst_file>

* 낙상 윈도우 블록만 저장, -r∙r2∙a 명령도 동일 방식 사용

o <lst_file> 파일 형식

<file_path>[,<file_repeat_count>[,<block_repeat_count>]]

<file_path>[,<file_repeat_count>[,<block_repeat_count>]]

...

o <lst_file>이 위치하는 폴더에 <lst_file>과 동일 파일명으로, .xtr, ytr, .xyl 등 확장자로 처리 결과를 작성

- .xtr : XTRAIN 데이터로, 가속도(ax, ay, az) 및 각속도(gx, gy, gz) 데이터를 ‘float’(4 바이트)로 저장

- .ytr  :  YTRAIN 데이터로, 낙상 데이터 여부(낙상 : 1, 일상 : 0)를 ‘int’(4 바이트)로 저장

- .xyl : 생성 결과 파일로, 처리 파일마다 윈도우 블록 갯수, XTR 파일내 시작 저장 위치, YTR 파일내 시작 저장 위치 등을 저장

<file_path>,<num_windows_blocks>,<xtr_offset>,<ytr_offset>

<file_path>,<num_windows_blocks>,<xtr_offset>,<ytr_offset>

...

□ 파일 검색을 통한 트레이닝 데이터셋 생성

o 기능 : 지정 폴더 및 하위 폴더에서 검색되는 파일 목록에 따라 트레이닝 데이터셋을 생성

o 명령어 형식

dsknife –r <search_dir> <file_selector> <lst_file> [<file_repeat_count> [<block_repeat_count>]]

o <file_selector> 사용 예시

- *.csv : 파일 확장자가 ‘csv’인 파일 전체

- S??T??R??.csv : KFALL 데이터셋 파일

o <lst_file>을 생성하고, <lst_file>과 동일 파일명으로, .xtr, ytr, .xyl 등 확장자로 처리 결과를 작성

□ 파일 검색 목록에 의한 트레이닝 데이터셋 생성

o 기능 : 파일 검색 목록에 지정된 폴더 및 하위 폴더에서 검색되는 파일 목록에 따라 트레이닝 데이터셋을 생성

o 명령어 형식

dsknife –r2 <search_list> <lst_file>

o <search_list> 파일 형식

<search_dir>,<file_selector>[,<file_repeat_count>[,<block_repeat_count>]]

<search_dir>,<file_selector>[,<file_repeat_count>[,<block_repeat_count>]]

...

o <lst_file>을 생성하고, <lst_file>과 동일 파일명으로, .xtr, ytr, .xyl 등 확장자로 처리 결과를 작성

□ 기존 데이터셋에 신규 트레이닝 데이터셋을 추가

o 기능 : 기존 데이터셋에 리스트 파일에 포함된 파일 목록에 따라 트레이닝 데이터셋을 추가

o 명령어 형식

dsknife –a <lst_file> <org_list_file>

o <lst_file> 및 <org_list_file>은 ‘-l’ 명령과 동일

o <lst_file>이 위치하는 폴더에 <lst_file>과 동일 파일명으로, .xtr, ytr, .xyl 등 확장자로 처리 결과를 작성

□ YTRAIN을 재작성

o 기능 : 기존 데이터셋의 YTRAIN만을 재작성

o 명령어 형식

dsknife –y <lst_file>

o .ytr 파일을 재작성하고, 기존 파일은 날짜 정보를 첨부하여 파일 명칭을 변경

□ 데이터 파일 Resample

o 기능 : 데이터 파일의 샘플링 레이트를 변환

o 명령어 형식

dsknife –s <src_dir> <file_selector> <dst_dir> <read_lines> <resample_index>

o <src_dir> 및 하위 폴더에서 <file_selector>에 따라 변환할 원본 파일을 검색

- <dst_dir>에 원본 파일과 동일 파일명으로 변환 결과를 작성

- <read_lines>만큼 데이터 라인을 읽어 <resample_index>에 해당하는 데이터 라인만 저장

□ 데이터 파일 Resample(폴더 구조 유지)

o 기능 : 데이터 파일의 샘플링 레이트를 변환

o 명령어 형식

dsknife –s2 <src_dir> <file_selector> <dst_dir> <read_lines> <resample_index>

o ‘-s’ 명령과 동일하게 동작하나, <src_dir>의 하위 폴더를 <dst_dir>에 동일 명칭으로 생성한 후 변환 결과를 해당 폴더에 작성

□ 데이터셋 생성 결과 출력

o 기능 : .xyl 파일의 데이터셋 생성 결과를 출력

o 명령어 형식

dsknife –p <lst_file>

‘dsknife.cnf’ 파일 설정 예시

<첨부 1>

□ Safeware

#

FILE_TYPE 1

WINDOW_SIZE 25

WINDOW_SHIFT 1

YTRAIN_THRESHOLD 10

ACC_SCALE_FACTOR 1.0f

GYRO_SCALE_FACTOR 1.0f

FILE_REPEAT_COUNT 1

BLOCK_REPEAT_COUNT 1

□ KFALL

#

FILE_TYPE 2

WINDOW_SIZE 25

WINDOW_SHIFT 1

YTRAIN_THRESHOLD 10

ACC_SCALE_FACTOR 1.0f

GYRO_SCALE_FACTOR 1.0f

FILE_REPEAT_COUNT 1

BLOCK_REPEAT_COUNT 1

Python에서 XTR 파일 읽기

<첨부 2>

import numpy as np

import time

start_time = time.time()

data = np.fromfile("test1.xtr", dtype='<f4')

len1 = int(len(data) / 6)

len2 = int(len1 / 25)

data2 = data.reshape(len2, 25, 6)

end_time = time.time()

print(data.shape)

print(data.dtype)

print(data.dtype.names)

print(data)

print(len(data))

print(len1)

print(len2)

print(data2.shape)

print(data2.dtype)

print(data2)

print('elapsed time: ', end_time - start_time)

DSKnife 명령셋

<첨부 3>

Usage : dsknife -l <lst_file>

dsknife -l0 <lst_file>

dsknife -l1 <lst_file>

dsknife -r <search_dir> <file_selector> <lst_file> [<file_repeat_count> [<block_repeat_count>]]

dsknife -r0 <search_dir> <file_selector> <lst_file> [<file_repeat_count> [<block_repeat_count>]]

dsknife -r1 <search_dir> <file_selector> <lst_file> [<file_repeat_count> [<block_repeat_count>]]

dsknife -r2 <search_list> <lst_file>

dsknife -r20 <search_list> <lst_file>

dsknife -r21 <search_list> <lst_file>

dsknife -a <lst_file> <org_lst_file>

dsknife -a0 <lst_file> <org_lst_file>

dsknife -a1 <lst_file> <org_lst_file>

dsknife -y <lst_file>

dsknife -s <src_dir> <file_selector> <dst_dir> <read_lines> <resample_index>

dsknife -s2 <src_dir> <file_selector> <dst_dir> <read_lines> <resample_index>

dsknife -p <lst_file>

dsknife -h